<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /**
     * 冒泡排序算法
     * 
     * 时间复杂度：O(n²) - 两层嵌套循环
     * 空间复杂度：O(1) - 只使用了常数级别的额外空间
     * 
     * 算法思路：
     * 1. 比较相邻的元素，如果前一个比后一个大，则交换它们
     * 2. 对每一对相邻元素做同样的工作，从开始第一对到结尾的最后一对
     * 3. 每轮循环后，最大的元素会"冒泡"到数组末尾
     * 4. 重复以上步骤，直到没有任何一对数字需要比较
     */
    function bubbleSort(arr) {
      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length - i - 1; j++) {
          if (arr[j] > arr[j + 1]) {
            [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
          }
        }
      }
      return arr
    }
    console.log("冒泡排序:", bubbleSort([5, 1, 4, 2, 8])) // [1, 2, 4, 5, 8]
  </script>
</html>
